import { BrowserWindow, screen } from 'electron';
import path from 'path';

/**
 * 主窗口管理模块
 * 负责创建和配置主应用窗口
 */

/**
 * 创建主窗口
 */
export function createMainWindow(): Promise<BrowserWindow> {
  return new Promise((resolve, reject) => {
    try {
      // 获取主显示器信息
      const primaryDisplay = screen.getPrimaryDisplay();
      const { width, height } = primaryDisplay.workAreaSize;
      
      // 计算窗口尺寸（占屏幕的 80%）
      const windowWidth = Math.floor(width * 0.8);
      const windowHeight = Math.floor(height * 0.8);
      
      // 创建主窗口
      const mainWindow = new BrowserWindow({
        width: windowWidth,
        height: windowHeight,
        minWidth: 1000,
        minHeight: 700,
        center: true,
        show: false, // 先不显示，等加载完成后再显示
        
        // 窗口样式
        titleBarStyle: 'hiddenInset', // macOS 样式
        vibrancy: 'under-window', // macOS 毛玻璃效果
        
        // Web 安全设置
         webPreferences: {
           nodeIntegration: false, // 禁用 Node.js 集成
           contextIsolation: true, // 启用上下文隔离
           allowRunningInsecureContent: false, // 禁止运行不安全内容
           experimentalFeatures: false, // 禁用实验性功能
           
           // 预加载脚本
           preload: path.join(__dirname, '../preload/index.js'),
           
           // 安全设置
           webSecurity: true,
           nodeIntegrationInWorker: false,
           nodeIntegrationInSubFrames: false,
           
           // 开发工具
           devTools: process.env.NODE_ENV === 'development'
         }
      });
      
      // 加载应用内容
      const loadContent = async () => {
        try {
          // 使用 process.cwd() 获取当前工作目录，然后构建渲染进程文件路径
          const rendererPath = path.join(process.cwd(), 'renderer/dist/index.html');
          console.log('尝试加载渲染进程文件:', rendererPath);
          console.log('当前工作目录:', process.cwd());
          
          // 检查文件是否存在
          const fs = require('fs');
          console.log('文件是否存在:', fs.existsSync(rendererPath));
          
          if (!fs.existsSync(rendererPath)) {
            throw new Error(`渲染进程文件不存在: ${rendererPath}`);
          }
          
          await mainWindow.loadFile(rendererPath);
          
          if (process.env.NODE_ENV === 'development') {
            // 开发环境下打开开发者工具
            mainWindow.webContents.openDevTools();
          }
          
          console.log('主窗口内容加载完成');
        } catch (error) {
          console.error('加载窗口内容失败:', error);
          throw error;
        }
      };
      
      // 窗口事件处理
      mainWindow.once('ready-to-show', () => {
        console.log('主窗口准备显示');
        mainWindow.show();
        
        // 开发环境下聚焦窗口
        if (process.env.NODE_ENV === 'development') {
          mainWindow.focus();
        }
        
        resolve(mainWindow);
      });
      
      mainWindow.on('closed', () => {
        console.log('主窗口已关闭');
      });
      
      // 处理窗口加载错误
      mainWindow.webContents.on('did-fail-load', (event, errorCode, errorDescription) => {
        console.error('窗口加载失败:', errorCode, errorDescription);
        reject(new Error(`窗口加载失败: ${errorDescription}`));
      });
      
      // 处理页面崩溃
       mainWindow.webContents.on('render-process-gone', (event, details) => {
         console.error('渲染进程崩溃:', details);
         
         // 可以选择重新加载或显示错误页面
         if (details.reason !== 'killed') {
           mainWindow.reload();
         }
       });
      
      // 处理无响应
      mainWindow.on('unresponsive', () => {
        console.warn('主窗口无响应');
      });
      
      mainWindow.on('responsive', () => {
        console.log('主窗口恢复响应');
      });
      
      // 开始加载内容
      loadContent().catch(reject);
      
    } catch (error) {
      console.error('创建主窗口失败:', error);
      reject(error);
    }
  });
}

/**
 * 获取窗口默认配置
 */
export function getDefaultWindowConfig() {
  return {
    width: 1200,
    height: 800,
    minWidth: 1000,
    minHeight: 700
  };
}